home *** CD-ROM | disk | FTP | other *** search
/ 9-Digit Zip Code Directory / 9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO / z4src.zip / ZINC.HPP < prev    next >
C/C++ Source or Header  |  1993-08-31  |  12KB  |  383 lines

  1. #ifndef _ZINC_HPP_
  2. #define _ZINC_HPP_
  3. //----------------------------------------------------------------------------
  4. //                            MODULE DESCRIPTION
  5. //
  6. //  Module:    zinc.hpp
  7. //   Title:    Zinc 3.5 Interface library
  8. //  Notice:    John M. Weeder
  9. //                 Copyright (c) 1993. All rights reserved.
  10. //             This module contains proprietary information and should be 
  11. //                treated as confidential.
  12. //
  13. //----------------------------------------------------------------------------
  14. //                           MAINTENANCE HISTORY
  15. //
  16. // $Workfile$
  17. // $Revision$
  18. //   $Author$
  19. //     $Date$
  20. //      $Log$    
  21. //
  22. //----------------------------------------------------------------------------
  23. //                             MODULE NARRATIVE
  24. //
  25. //    This module is the primary header file for the Zinc Framework interface.
  26. //    This module should be included by all modules which use Zinc.
  27. //    This module includes the base library header files.
  28. //
  29. //    The code in this module may be written in C++ or C.
  30. //
  31. //    This module is portable to:
  32. //        DOS 3.X+
  33. //        MS Windows 3.X+
  34. //        OS/2 2.X+
  35. //        OS/2 2.0 PM
  36. //
  37. //    The following compilers are supported:
  38. //        MSC 6.0A
  39. //        MSC/C++ 7.0
  40. //        Borland C++ 3.1 for DOS and Windows
  41. //        Borland C++ 1.0 for OS/2 2.X
  42. //
  43. //----------------------------------------------------------------------------
  44. #include <class.hpp>
  45.  
  46.  
  47. //----------------------------------------------------------------------------
  48. //    Constants
  49. //----------------------------------------------------------------------------
  50.  
  51. #define MAX_HELPBAR        (256)
  52.  
  53. //
  54. //    Special values for buttons and menu items.
  55. //    Other special messages start at 10000.
  56. //
  57. enum _ZN_MSG                                    // Internal Zinc interface library
  58.     {                                                //  message
  59.     ZN_MSG_USER = 10000,                        // User messages
  60.  
  61.     ZN_MSG_UNKNOWN = 20000,
  62.     ZN_MSG_INIT,                                // Window initialize
  63.     ZN_MSG_TERMINATE,                            // Window terminate
  64.     ZN_MSG_STRING_CHANGE,                    // Key pressed in string box
  65.     ZN_MSG_STRING_SELECT,                    // Enter pressed in string box
  66.     ZN_MSG_VLIST_INIT,                        // Intialize virtual list
  67.     ZN_MSG_VLIST_QUERY,                        // Query element
  68.     ZN_MSG_VLIST_SELECT,                        // Element selected/unselected
  69.     ZN_MSG_VLIST_DBL_CLK,                    // Virtual list double click
  70.     ZN_MSG_VLIST_CURRENT,                    // Current list element has changed
  71.     ZN_MSG_VLIST_TITLE,                        // Get virtual list title
  72.     ZN_MSG_HELP,                                // Query help context
  73.     ZN_MSG_LIST_SELECT,                        // List element select
  74.     ZN_MSG_LIST_DBL_CLK,                        // List element double click
  75.     ZN_MSG_NO_HELP,                            // Ignore this help context
  76.                                                     // pv2 is buffer to fill with text
  77.     ZN_MSG_MAX,
  78.  
  79.     ZN_CMD_CLOSE     = 30001,                    // Close window
  80.     ZN_CMD_EXIT_RQ = 30002,                    // Request application exit
  81.     ZN_CMD_EXIT     = 30003,                    // Exit application
  82.     ZN_CMD_HELP     = 30004,                    // Display help
  83.  
  84.     ZN_CMD_OK         = 30101,                    //    Message box OK
  85.     ZN_CMD_CANCEL     = 30102,                    // Message box Cancel
  86.     ZN_CMD_YES         = 30103,                    // Message box Yes
  87.     ZN_CMD_NO         = 30104,                    //    Message box No
  88.     ZN_CMD_MAX
  89.     };
  90. typedef USHORT ZN_MSG;                        // Zinc message
  91. BASETYPE(ZN_MSG);
  92.  
  93. typedef USHORT ZN_HELP;                        // Help context
  94. BASETYPE(ZN_HELP);
  95.  
  96. typedef USHORT ZN_FLD;                        // Field id
  97. BASETYPE(ZN_FLD);
  98.  
  99. #define ZN_VLIST_SINGLE    (0)                // List allow only a single selection
  100. #define ZN_VLIST_MULTI    (1)                // List allows multiple selections
  101. #define ZN_VLIST_TITLE    (2)                // List has title
  102.                                                     // NOTE: Currently a list MUST have a title
  103.  
  104. struct ZN_VLIST_INIT                            // This structure must be filled in
  105.     {                                                //  by the user
  106.     LONG lElems;                                // Number of elements
  107.     int *aiTabstops;                            // Tab stops
  108.     FLAG16 fs;                                    // Flags:    VLIST_SINGLE
  109.                                                     //             VLIST_MULTI
  110.     };
  111. BASETYPE(ZN_VLIST_INIT);
  112.  
  113. struct ZN_VLIST_ELEM                            // List element
  114.     {
  115.     LONG lId;                                    // Element number
  116.     BOOL fSelected;                            // Element selected
  117.     PSZ pszBuf;                                    // Element text
  118.     SIZET cBuf;                                    // INTERNAL - Size of allocated buffer
  119.     USHORT usUsed;                                // INTERNAL - Usage count
  120.     };
  121. BASETYPE(ZN_VLIST_ELEM);
  122.  
  123. //
  124. //    Flags for window create and load functions.
  125. //
  126. #define ZN_LOAD_CENTER                   (0x10000000L)
  127. #define ZN_LOAD_HELPBAR                  (0x20000000L)
  128. #define ZN_LOAD_NO_SHOW                  (0x40000000L)
  129. #define ZN_LOAD_VL_SIZE(x,y)          ((0x80000000L)\
  130.                                               |((((ULONG)(y)) & 0x07FL)<<16)\
  131.                                               |(((ULONG)(x)) & 0x0FFFFL))
  132.  
  133. #define ZN_LOAD_NO_VL_TITLE            (0x08000000L)        // No title bar
  134. #define ZN_LOAD_NO_VL_TB                (0x04000000L)        // Don't resize to fit tool bar
  135. #define ZN_LOAD_NO_VL_HB                (0x02000000L)        // Don't resize to fit help bar
  136. #define ZN_LOAD_NO_VL_SB                (0x01000000L)        // Don't move scroll bar left/right
  137. #define ZN_LOAD_VL_BORDER                (0x00800000L)        // Border
  138.  
  139. #define ZN_LOAD_VL_X(fl)                ((ULONG)(fl) & 0x0FFFFL)
  140. #define ZN_LOAD_VL_Y(fl)                (((ULONG)(fl) >> 16) & 0x07FL)
  141.  
  142. //
  143. // These types are defined here so that the entire
  144. // Zinc header file is not included in applications.
  145. //
  146. #ifndef INCL_ZINC_INTERFACE
  147. typedef USHORT UI_HELP_CONTEXT;
  148. typedef USHORT OBJECTID;
  149. #endif
  150.  
  151. enum _ZN_MOUSE
  152.     {
  153.     MOUSE_DEFAULT = 0,
  154.     MOUSE_HOURGLASS,
  155.     MOUSE_MAX
  156.     };
  157. typedef USHORT ZN_MOUSE;                    // Zinc message
  158. BASETYPE(ZN_MOUSE);
  159.  
  160. //
  161. //    Mapping object for help bar. Maps a window help context to
  162. //    a string.
  163. //
  164. struct ZN_HELPMAP
  165. {
  166.     ZN_HELP help;
  167.     PSZ psz;
  168. };
  169. BASETYPE(ZN_HELPMAP);
  170.  
  171.  
  172. //
  173. //    List element string
  174. //
  175. struct ZN_LISTELEM
  176. {
  177.     PCSZ pcsz;                                    // List text
  178.     ZN_MSG msg;                                    // List item value 
  179.     PCSZ pcszBitmap;                            // Bitmap name or NULL.
  180. };
  181. BASETYPE(ZN_LISTELEM);
  182.  
  183.  
  184. #define ZN_MBOX_OK            (0x0000)        // Message box types
  185. #define ZN_MBOX_OKCANCEL    (0x0001)
  186. #define ZN_MBOX_YESNO        (0x0002)
  187. #define ZN_MBOX_DFT1            (0x0000)        // Default button 1
  188. #define ZN_MBOX_DFT2            (0x0010)        // Default button 2
  189.  
  190. #define ZN_MID_OK                (0)            // Message box result ids
  191. #define ZN_MID_CANCEL        (1)
  192. #define ZN_MID_YES            (2)
  193. #define ZN_MID_NO                (3)
  194. #define ZN_MID_ERROR            (4)            // Message box error
  195.  
  196.  
  197. typedef PCSZ FIELDID;                        // Field id type
  198. #define FID(id)    ((FIELDID)US2P(id))
  199.  
  200. //
  201. //    ZincMain() mode constants
  202. //
  203. #define ZINC_INITIALIZE        (0)
  204. #define ZINC_TERMINATE        (1)
  205.  
  206. //
  207. //    String colors
  208. //
  209. enum ZN_COLOR
  210.     {
  211.    ZN_CLR_BLACK,
  212.     ZN_CLR_DFT = ZN_CLR_BLACK,
  213.     ZN_CLR_FIRST = ZN_CLR_DFT,
  214.    ZN_CLR_BLUE,
  215.    ZN_CLR_GREEN,
  216.    ZN_CLR_CYAN,
  217.    ZN_CLR_RED,
  218.    ZN_CLR_MAGENTA,
  219.    ZN_CLR_BROWN,
  220.    ZN_CLR_LIGHTGRAY,
  221.    ZN_CLR_DARKGRAY,
  222.    ZN_CLR_LIGHTBLUE,
  223.    ZN_CLR_LIGHTGREEN,
  224.    ZN_CLR_LIGHTCYAN,
  225.    ZN_CLR_LIGHTRED,
  226.    ZN_CLR_LIGHTMAGENTA,
  227.    ZN_CLR_YELLOW,
  228.    ZN_CLR_WHITE,
  229.     ZN_CLR_LAST = ZN_CLR_WHITE
  230.     };
  231. BASETYPE(ZN_COLOR);
  232.  
  233.  
  234. //----------------------------------------------------------------------------
  235. //    ZN_WINDOW
  236. //----------------------------------------------------------------------------
  237. CLASSDEF(ZN_WINDOW);
  238. class CLASSTYPE ZN_WINDOW : public CL_OBJECT
  239. {
  240.     BOOL fInit;
  241.     PVOID pvWindow;                            // Pointer to actual window
  242.     PCSZ _pcsz;
  243.     FLAG32 _fl;
  244.  
  245. public:
  246.     BOOL fDialog;
  247.  
  248.     FN_M ZN_WINDOW(PCSZ, FLAG32 = ZN_LOAD_CENTER);
  249.     virtual FN_M ~ZN_WINDOW();
  250.  
  251.     VOID FN_M Close();
  252.     VOID FN_M ContextHelp(ZN_HELP);
  253.     ZN_MSG FN_M Dialog();
  254.     VOID FN_M DialogExit(ZN_MSG = 0);
  255.     BOOL FN_M Enable(FIELDID, BOOL = TRUE);
  256.     VOID FN_M Exit();
  257.     VOID FN_M ExitRequest();
  258.     BOOL FN_M GetButtonState(FIELDID, PBOOL = NULL);
  259.     PCSZ FN_M GetComboSel(FIELDID);
  260.     ZN_FLD FN_M GetCurrent();
  261.     BOOL FN_M GetDate(FIELDID, RTIMET);
  262.     PCSZ FN_M GetFormattedString(FIELDID, BOOL = FALSE);
  263.     PCSZ FN_M GetHzListSel(FIELDID);
  264.     ZN_MSG FN_M GetHzListSelId(FIELDID);
  265.     PVOID FN_M GetIconBitmap(FIELDID);
  266.     PCSZ FN_M GetNumber(FIELDID, PSZ, SHORT = 0, FLAG16 = 0);
  267.     PCSZ FN_M GetString(FIELDID);
  268.     PCSZ FN_M GetText(FIELDID, PSZ = NULL);
  269.     BOOL FN_M GetTime(FIELDID, RTIMET);
  270.     PCSZ FN_M GetVtListSel(FIELDID);
  271.     ZN_MSG FN_M GetVtListSelId(FIELDID);
  272.     VOID FN_M Help(PZN_HELPMAP, ZN_HELP, PSZ);
  273.     BOOL FN_M IsDialog() const
  274.         {
  275.         return fDialog;
  276.         }
  277.     virtual BOOL FN_M IsValid() const
  278.         {
  279.         return pvWindow != NULL && CL_OBJECT::IsValid();
  280.         }
  281.     PVOID FN_M LoadBitmap(PCSZ);
  282.     BOOL FN_M LoadButtonBitmap(FIELDID, PCSZ);
  283.     PVOID FN_M LoadIcon(PCSZ = NULL);
  284.     BOOL FN_M LoadIconBitmap(FIELDID, PCSZ = NULL, BOOL = TRUE);
  285.     VOID FN_M Maximize();
  286.     VOID FN_M Minimize();
  287.     PCSZ FN_M Name(FIELDID = NULL);
  288.     VOID FN_M NotDone();
  289.     ZN_FLD FN_M Number(FIELDID = NULL);
  290.     BOOL FN_M Paste(PCSZ);
  291.     BOOL FN_M PostMessage(FIELDID, ZN_MSG, PVOID, PVOID);
  292.     static VOID FN_M Process();
  293.     static ZN_MSG FN_M SendMessage(PCSZ, ZN_MSG, PVOID = NULL, PVOID = NULL);
  294.     BOOL FN_M SetButtonBitmap(FIELDID, PVOID);
  295.     BOOL FN_M SetButtonState(FIELDID, BOOL);
  296.     BOOL FN_M SetButtonText(FIELDID, PCSZ);
  297.     BOOL FN_E SetComboList(FIELDID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  298.     BOOL FN_E SetComboList(FIELDID, PPSZ);
  299.     BOOL FN_E SetComboList(FIELDID, PZN_LISTELEM);
  300.     BOOL FN_M SetComboSel(FIELDID, PCSZ);
  301.     VOID FN_M SetCurrent(FIELDID);
  302.     BOOL FN_M SetDate(FIELDID, TIMET = 0);
  303.     BOOL FN_M SetFormattedString(FIELDID, PCSZ = NULL);
  304.     BOOL FN_M SetGreyState(FIELDID, BOOL);
  305.     VOID FN_M SetHelp(PCSZ = NULL, BOOL = FALSE);
  306.     BOOL FN_E SetHzList(FIELDID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  307.     BOOL FN_E SetHzList(FIELDID, PPSZ);
  308.     BOOL FN_E SetHzList(FIELDID, PZN_LISTELEM);
  309.     BOOL FN_M SetIconBitmap(FIELDID, PVOID, BOOL = TRUE);
  310.     static BOOL FN_M SetMouse(ZN_MOUSE = MOUSE_DEFAULT);
  311.     BOOL FN_M SetNumber(FIELDID, LONG);
  312.     BOOL FN_M SetNumber(FIELDID, PCSZ);
  313.     BOOL FN_M SetNumberRange(FIELDID, PCSZ);
  314.     BOOL FN_M SetPrompt(FIELDID, PCSZ = NULL);
  315.     BOOL FN_M SetString(FIELDID, PCSZ = NULL);
  316.     BOOL FN_M SetStringColor(FIELDID, ZN_COLOR = ZN_CLR_DFT);
  317.     BOOL FN_M SetText(FIELDID, PCSZ = NULL, SHORT = -1);
  318.     BOOL FN_M SetTime(FIELDID, TIMET = 0);
  319.     VOID FN_M SetTitle(PCSZ);
  320.     VOID FN_M SetVlistPos(LONG);
  321.     VOID FN_M SetVlistSize(LONG);
  322.     BOOL FN_E SetVtList(FIELDID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  323.     BOOL FN_E SetVtList(FIELDID, PPSZ);
  324.     BOOL FN_E SetVtList(FIELDID, PZN_LISTELEM);
  325.     BOOL FN_M SetVtListSel(FIELDID, ZN_MSG);
  326.     BOOL FN_M Setup();
  327.     VOID FN_M Show();
  328.     BOOL FN_M Terminate();
  329.     virtual ZN_MSG FN_M User(ZN_MSG, PVOID = NULL, PVOID = NULL);
  330.     VOID FN_M VlistRefresh();
  331.  
  332. protected:
  333.     PVOID FN_M Find(FIELDID, USHORT = 0);
  334.     BOOL FN_E _SetComboList(PVOID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  335.     BOOL FN_E _SetHzList(PVOID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  336.     BOOL FN_E _SetVtList(PVOID, PCSZ, ZN_MSG = 0, PCSZ = NULL);
  337. };
  338.  
  339.  
  340. //----------------------------------------------------------------------------
  341. //    Prototypes
  342. //----------------------------------------------------------------------------
  343.  
  344. //
  345. //    znmem.cpp
  346. //
  347. extern USHORT usMemRequired;
  348.  
  349. //
  350. //    User defined! 
  351. //    This function must be declared in any application which uses the zinc 
  352. //    interface library. This function is called at startup after Zinc is 
  353. //    initialized and again right before termination.
  354. //
  355. //    The single parameter is ZINC_INITIALIZE at startup and 
  356. //    ZINC_TERMINATE at termination.
  357. //
  358. BOOL FN_E ZincMain(SHORT);
  359.  
  360. //
  361. // znmain.cpp
  362. //
  363. #define ZN_ML_WAIT        (0x0001)
  364. #define ZN_ML_DIALOG        (0x0002)
  365. VOID FN_E ZincMessageLoop(FLAG16 = ZN_ML_WAIT);
  366.  
  367. //
  368. //    znload.cpp
  369. //    Load a zinc window from disk.
  370. //
  371. BOOL FN_E ZincWindow(PCSZ, FLAG32 = ZN_LOAD_CENTER);
  372.  
  373. //
  374. // znmsg.cpp
  375. //
  376. ZN_MSG FN_EV ZincMessageBox(PCSZ, FLAG16, PCSZ, ...);
  377.  
  378.  
  379. //----------------------------------------------------------------------------
  380. //------------------------------- End of File --------------------------------
  381. //----------------------------------------------------------------------------
  382. #endif                                            // _ZINC_HPP_
  383.